#ifndef PROCESS_DATA_TABLE_MODEL_H
#define PROCESS_DATA_TABLE_MODEL_H

/*****************************************************************************************
  @copyright  2020-2021
  @date       2021-02-17
  @author     qiaowei
  @contact    weiweiqiao@126.com
  @version    1.0
  @brief      模型类，根据传入的数据返回给视图显示
  @history    None
******************************************************************************************/

#include <QAbstractTableModel>
#include <QObject>

class Process_data;
class Track_id_data_integrated;

class Process_data_table_model : public QAbstractTableModel
{
    Q_OBJECT

public:
    explicit Process_data_table_model(QObject* parent = nullptr);
    ~Process_data_table_model();

    /***************************************************************************
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @date     2021-02-07
     @brief    返回模型中数据项的行数，因为存在模型动态添加数据，行数会变化
     @param    parent 当前返回行数的项集合的父索引
     @return   表格行数
    ***************************************************************************/
    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;

    /***************************************************************************
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @date     2021-02-12
     @brief    返回模型中数据项的行数，目前数据显示只需要17列
     @param    parent 当前返回列数的项集合的父索引
     @return   表格列数
    ***************************************************************************/
    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;

    /***************************************************************************
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @date     2021-02-12
     @brief    根据索引、角色返回位置处数据
     @param    index 列表中项的索引
     @param    role 角色
     @return   索引处相应角色的值
    ***************************************************************************/
    virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;

    /***************************************************************************
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @date     2021-02-12
     @brief    根据表头位置，返回表头处数据
     @param    section 表头行数/列数
     @param    orientation 行表头/列表头标识
     @param    role 角色
     @return   表头处相应角色的值
    ***************************************************************************/
    virtual QVariant headerData(int section,
                                Qt::Orientation orientation,
                                int role = Qt::DisplayRole) const;

    /***************************************************************************
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @date     2021-02-12
     @brief    重置数据集保存的数据，如果数据集数据不为空，将其delete后重新创建数据集，保
               存新添加的数据
    ***************************************************************************/
    void reset_data_set();

signals:
    void sig_get_track_data_integrated(Track_id_data_integrated* data);

private:
    /***************************************************************************
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @date     2021-02-12
     @brief    创建信号槽
    ***************************************************************************/
    void init_connections();

    /***************************************************************************
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @date     2021-02-12
     @brief    将获取的数据项data添加到数据集合中
     @param    data 数据项，QMap类型
    ***************************************************************************/
    void add_data_to_process_list(Track_id_data_integrated* data);

private:
    QList<Track_id_data_integrated* >* process_list_;
};

#endif // PROCESS_DATA_TABLE_MODEL_H
